package model.registro;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;


public class RegistroDocumentosDisponibles extends Registro {

	private String aNombreDocumento;
	private int aOffSet;
	private int aAlgoritmoCompresion;
	private float aGradoCompresion;
	
	public RegistroDocumentosDisponibles(String xNombreDocumento,int xOffSet,int xAlgoritmoCompresion,float xGradoCompresion) {
		aNombreDocumento=xNombreDocumento;
		aOffSet=xOffSet;
		aAlgoritmoCompresion=xAlgoritmoCompresion;
		aGradoCompresion=xGradoCompresion;
	}
	
	public RegistroDocumentosDisponibles() {
	}
	
	public void convertirBytesARegistro(byte[] xInput) throws IOException {

		ByteArrayInputStream bytesRegistro = new ByteArrayInputStream(xInput);
        DataInputStream input = new DataInputStream(bytesRegistro);
         
        aOffSet=input.readInt();
        aAlgoritmoCompresion=input.readInt();
        aGradoCompresion=input.readFloat(); 
        
       	int tamanioNombreDocumento=input.readInt();
		byte[] bytesNombreDocumento= new byte[tamanioNombreDocumento];
		input.read(bytesNombreDocumento);
		aNombreDocumento=new String(bytesNombreDocumento);

	 }

	 public byte[] convertirRegistroABytes() throws IOException {

        ByteArrayOutputStream bytesNodo = new ByteArrayOutputStream();
        DataOutputStream output = new DataOutputStream(bytesNodo);

        output.writeInt(aOffSet);
        output.writeInt(aAlgoritmoCompresion);
        output.writeFloat(aGradoCompresion);
        
        output.writeInt(aNombreDocumento.getBytes().length);
        output.write(aNombreDocumento.getBytes());
         
        return bytesNodo.toByteArray();
	 }
	
	public int getTamanioRegistro() {
		return aNombreDocumento.getBytes().length+4*ConversionesTiposDatos.sizeOfInt();
	}

	public int getAlgoritmoCompresion() {
		return aAlgoritmoCompresion;
	}

	public float getGradoCompresion() {
		return aGradoCompresion;
	}

	public String getNombreDocumento() {
		return aNombreDocumento;
	}

	public int getOffSet() {
		return aOffSet;
	}
	
}
